package com.swotxu.oldwebproject.redis.listener;

import com.swotxu.oldwebproject.session.utils.RedisSessionUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.JedisPubSub;

/**
 * redis key过期监听
 * 用于监听 server idCard，类似心跳机制，将服务器注册到redis，保持服务器在线
 *
 * @Date: 2020/2/18 16:19
 * @Author: xu.hai
 */
public class ServerOnlineRedisListener extends JedisPubSub {
    private static final Logger LOGGER = LoggerFactory.getLogger(ServerOnlineRedisListener.class);

    @Override
    public void onMessage(String s, String s1) {

    }

    /**
     * 主要监听 serverIdCard。
     * 若服务器注册的身份标识过期，则重新注册此服务器的身份标识。
     * 用于保持此服务器在线.
     *
     * 取得按表达式的方式订阅的消息后的处理
     *   -- 在项目集群环境下，key删除，会触发多个监听器
     *
     * @param pattern
     * @param channel
     * @param key   如：cbm:serverIdCard:E698C25631C80C5DE7B41B1D24FD968E
     */
    @Override
    public void onPMessage(String pattern, String channel, String key) {
        //当前服务器注册的身份标识过期时触发。
        if (key.contains(RedisSessionUtil.SERVER_ID_CARD)) {
            LOGGER.debug(String.format("pattern: %s, channel: %s, key: %s", pattern, channel, key));
            RedisSessionUtil.registrationCurrentServer();
        }
    }

    @Override
    public void onSubscribe(String s, int i) {

    }

    @Override
    public void onUnsubscribe(String s, int i) {

    }

    @Override
    public void onPUnsubscribe(String s, int i) {

    }

    @Override
    public void onPSubscribe(String s, int i) {

    }
}
